﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace ProjectEulerSolutions
{
    /*
     *It is possible to show that the square root of two can be expressed as an infinite continued fraction.

√ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213...

By expanding this for the first four iterations, we get:

1 + 1/2 = 3/2 = 1.5
1 + 1/(2 + 1/2) = 7/5 = 1.4
1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666...
1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...

The next three expansions are 99/70, 239/169, and 577/408, but the eighth expansion, 1393/985, is the first example where the number of digits in the numerator exceeds the number of digits in the denominator.

In the first one-thousand expansions, how many fractions contain a numerator with more digits than denominator?
 
     * */
    class Problem57 : IProblem
    {
        public string Calculate()
        {
            //taktika
            //svaka slijedeća ekspanzija je zbroj nominator + 2*denominator / nominator + denominator
            //samo iteracijom do 1000, i brojanje

            int count = 0;

            BigInteger nominator = new BigInteger(1);
            BigInteger denominator = new BigInteger(1);

            for (int i = 0; i < 1000; i++)
            {
                BigInteger tempNominator = nominator + 2 * denominator;
                denominator = nominator + denominator;
                nominator = tempNominator;

                
                

                if (NumberOfDigits(nominator) != NumberOfDigits(denominator))
                {
                    Console.WriteLine("{0} {1}", nominator, denominator);
                    count++;
                }
            }


            return count.ToString();
        }

        long NumberOfDigits(BigInteger number)
        {
            double numDigits = Math.Ceiling(BigInteger.Log10(number));

            long result = (long)numDigits;

            if (result == numDigits)
                result++;

            return result;
        }
    }
}
